﻿#ifndef SPRITE_H
#define SPRITE_H
#include "Plane.h"
#include<QTimer>
class ProtectionCover;

//玩家
class Sprite : public Plane
{
public:
    Sprite();
    Sprite(int x, int y, QObject* parent = nullptr);
    Sprite(int x, int y,QSize WindowSize, QObject* parent = nullptr);
    virtual ~Sprite();
    void init();
    void update()override;
    void draw(QPainter*painter)override;
    //移动
    void moveBy(int dx,int dy);
    //血量减少，血量还有的话开启保护罩
    virtual void reduceHp(const int hp = 1);
    //将飞机设置到初始位置,并获得一定时间的保护期
    void setInitPos();
    //获取保护罩指针
    ProtectionCover* getProtection();
    //设置保护时间(毫秒)，0表示关闭无敌时间
    void setProtectTime(size_t time);
    //获取保护时间
    const size_t& getProtectTime();
    //获取保护状态剩余时间
    const int getProtectRemainingTime();
    //获取保护状态
    const bool getProtectState();
    //开启保护罩模式
    void startProtect();
    //关闭保护罩模式
    void closeProtect();
    //获取分数
    const int getTotalScore(); 
    //增加分数
    void addTotalScore(const int score);
    //设置最大炸弹装弹量
    void setMaxBombNum(const int num);
    //获取炸弹数量
    const int getBombNum();
    //增加炸弹数量
    void addBombNum(const int num=1);
    //减少炸弹数量
    void reduceBombNum(const int num=1);
    //设置暂停
    virtual void setPause(bool flag);
protected:
   
private:
    QPoint m_initPos;//初始位置
    size_t m_ProtectTime=5000; //玩家的保护时间(毫秒)
    ProtectionCover* m_ProtectionCover = nullptr;//保护罩
    int m_TotalScore = 0;//分数
    int m_BombNum=0;//炸弹数量
    int m_maxBombNum = 3;//最大炸弹数量
    int m_r = 0;//碰撞半径做圆
};

#endif // SPRITE_H
